home *** CD-ROM | disk | FTP | other *** search
/ MacFormat 1999 Spring / macformat-077.iso / Shareware Plus / Development / SpriteWorld 2.2 / SpriteWorld files / Headers / SpriteFrame.h < prev    next >
Encoding:
Text File  |  1999-02-08  |  5.3 KB  |  194 lines  |  [TEXT/CWIE]

  1. ///--------------------------------------------------------------------------------------
  2. //    SpriteFrame.h
  3. //
  4. //    Portions are copyright: © 1991-94 Tony Myles, All rights reserved worldwide.
  5. ///--------------------------------------------------------------------------------------
  6.  
  7.  
  8. #ifndef __SPRITEFRAME__
  9. #define __SPRITEFRAME__
  10.  
  11.  
  12. #ifndef __SWCOMMON__
  13. #include "SWCommonHeaders.h"
  14. #endif
  15.  
  16. #ifndef __QDOFFSCREEN__
  17. #include <QDOffscreen.h>
  18. #endif
  19.  
  20.  
  21. #ifdef __cplusplus
  22. extern "C" {
  23. #endif
  24.  
  25. #if PRAGMA_ALIGN_SUPPORTED
  26. #pragma options align=mac68k
  27. #endif
  28.  
  29. ///--------------------------------------------------------------------------------------
  30. //    frame type definitions
  31. ///--------------------------------------------------------------------------------------
  32.  
  33. typedef struct FrameRec FrameRec;
  34. typedef FrameRec *FramePtr, **FrameHdl;
  35.  
  36.  
  37. ///--------------------------------------------------------------------------------------
  38. //    frame data structure
  39. ///--------------------------------------------------------------------------------------
  40.  
  41. struct FrameRec
  42. {
  43.     GWorldPtr         framePort;        // GWorld for the frame image
  44.     PixMapHandle     framePixHndl;    // handle to pix map (saved for unlocking/locking)
  45.     PixMapPtr         framePix;        // pointer color pix map (valid only while locked)
  46.     
  47.     char*             frameBaseAddr;      // base address of pixel data (valid only while locked)
  48.     unsigned long     frameRowBytes;      // number of bytes in a row of the frame
  49.     short             leftAlignFactor;  // used to align rect.left to the nearest long word 
  50.     short             rightAlignFactor; // used to align rect.right to the nearest long word
  51.     Boolean         isFrameLocked;      // has the frame been locked?
  52.     Boolean            isWindowFrame;    // is this a window Frame?
  53.     short            pad2;            // (note: boolean is the same as an unsigned char)
  54.     
  55.     Rect             frameRect;        // source image rectangle
  56.     short            hotSpotH;        // horizontal hot point for this frame
  57.     short            hotSpotV;        // vertical hot point for this frame
  58.     Point             offsetPoint;    // offset for this Frame's maskRgn
  59.     RgnHandle         maskRgn;        // image masking region
  60.     GWorldPtr        maskPort;        // GWorld for the mask image
  61.     PixMapHandle     maskPixHndl;    // handle to pix map (saved for unlocking/locking)
  62.     PixMapPtr         maskPix;        // pointer to color pix map (valid only while locked)
  63.     char*             maskBaseAddr;    // base address of mask pixel data (valid only while locked)
  64.     Boolean            tileMaskIsSolid;// used by SWDrawTilesAboveSprite
  65.     Boolean         sharesGWorld;    // shares GWorld with other frames
  66.     
  67.     unsigned short    useCount;          // number of sprites using this frame
  68.     short            worldRectOffset;  // non-whole-byte offset for 1-bit blitter
  69.     unsigned short     numScanLines;      // number of scan lines
  70.     unsigned long*     scanLinePtrArray; // array of pointers to each scanline
  71.     
  72.     PixelCodeHdl     pixCodeH;        // handle to compiled sprite data
  73.     BlitFuncPtr     frameBlitterP;    // procPtr to compiled sprite data
  74.     
  75.     long            userData;        // reserved for user
  76. };
  77.  
  78.  
  79. ///--------------------------------------------------------------------------------------
  80. //    frame flags constants
  81. ///--------------------------------------------------------------------------------------
  82.  
  83. typedef enum
  84. {
  85.     kNoMask = 0,
  86.     kPixelMask = 1,
  87.     kRegionMask = 2,
  88.     kFatMask = (kPixelMask + kRegionMask),
  89.     kSolidMask = 4
  90. } MaskType;
  91.  
  92.  
  93. ///--------------------------------------------------------------------------------------
  94. //    frame function prototypes
  95. ///--------------------------------------------------------------------------------------
  96.  
  97. SW_FUNC OSErr SWCreateFrame(
  98.     GDHandle     theGDH, 
  99.     FramePtr*     newFrameP, 
  100.     Rect* frameRect,
  101.     short depth);
  102.  
  103. SW_FUNC OSErr SWCreateWindowFrame(
  104.     FramePtr* newFrameP,
  105.     Rect*     frameRect,
  106.     short     maxHeight);
  107.  
  108. SW_FUNC OSErr SWCreateFrameFromCicnResource(
  109.     SpriteWorldPtr     destSpriteWorld, 
  110.     FramePtr*         newFrameP, 
  111.     short             iconResID, 
  112.     MaskType         maskType);
  113.  
  114. SW_FUNC OSErr SWCreateFrameFromPictResource(
  115.     SpriteWorldPtr destSpriteWorld,
  116.     FramePtr*         newFrameP, 
  117.     short             pictResID, 
  118.     short             maskResID, 
  119.     MaskType         maskType);
  120.  
  121. SW_FUNC OSErr SWCreateFrameFromGWorldAndRect(
  122.     FramePtr*     newFrameP, 
  123.     GWorldPtr     pictGWorld, 
  124.     GWorldPtr     maskGWorld, 
  125.     Rect*         frameRect, 
  126.     MaskType     maskType);
  127.  
  128. SW_FUNC OSErr SWCreateFrameFromGWorldAndRectStart(
  129.     GWorldPtr     *tempMaskGWorld,
  130.     short         maxWidth,
  131.     short         maxHeight,
  132.     MaskType     maskType);
  133.  
  134. SW_FUNC OSErr SWCreateFrameFromGWorldAndRectPartial(
  135.     FramePtr*     newFrameP,
  136.     GWorldPtr     pictGWorld,
  137.     GWorldPtr     maskGWorld,
  138.     GWorldPtr     tempMaskGWorld,
  139.     Rect*         frameRect,
  140.     MaskType     maskType);
  141.     
  142. SW_FUNC void SWCreateFrameFromGWorldAndRectFinish(
  143.     GWorldPtr tempMaskGWorld);
  144.  
  145. SW_FUNC Boolean SWDisposeFrame(
  146.     FramePtr *oldFramePP);
  147.  
  148. SW_FUNC void SWDisposeWindowFrame(
  149.     FramePtr *oldFramePP);
  150.  
  151. SW_FUNC void SWInitializeFrame(
  152.     FramePtr     tempFrameP, 
  153.     short         depth);
  154.  
  155. SW_FUNC void SWSetFrameMaskRgn(
  156.     FramePtr     srcFrameP, 
  157.     RgnHandle     maskRgn);
  158.  
  159. SW_FUNC void SWSetFrameHotSpot(
  160.     FramePtr srcFrameP,
  161.     short hotSpotH,
  162.     short hotSpotV);
  163.  
  164. SW_FUNC OSErr SWCopyFrame(
  165.     SpriteWorldPtr destSpriteWorldP,
  166.     FramePtr oldFrameP, 
  167.     FramePtr *newFrameP,
  168.     Boolean copyMasks);
  169.  
  170. SW_FUNC OSErr SWUpdateFrameMasks(
  171.     SpriteWorldPtr destSpriteWorldP, 
  172.     FramePtr srcFrameP);
  173.  
  174. SW_FUNC void SWLockFrame(
  175.     FramePtr srcFrameP);
  176.  
  177. SW_FUNC void SWUnlockFrame(
  178.     FramePtr srcFrameP);
  179.  
  180. SW_FUNC void SWLockWindowFrame(
  181.     FramePtr windowFrameP);
  182.     
  183. SW_FUNC void SWUnlockWindowFrame(
  184.     FramePtr windowFrameP);
  185.  
  186. #if PRAGMA_ALIGN_SUPPORTED
  187. #pragma options align=reset
  188. #endif
  189.  
  190. #ifdef __cplusplus
  191. }
  192. #endif
  193.  
  194. #endif    /* __SPRITEFRAME__ */